package com.recharge.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.recharge.common.result.ResultDO;
import com.recharge.core.entity.GoodsEntity;
import com.recharge.domain.query.GoodsQueryDO;
import com.recharge.domain.vo.GoodsDO;
import com.recharge.domain.vo.OrderDO;

import java.util.List;

/**
 * <p>
 * 商品表 服务类
 * </p>
 *
 * @author reagan
 * @since 2020-08-19
 */
public interface GoodsService extends IService<GoodsEntity> {

    public ResultDO add(GoodsDO domain);

    /**
     * 批量新增商品
     * @param param
     * @return
     */
    public ResultDO addBatch(List<GoodsDO> param, String userName);

    public ResultDO edit(GoodsDO domain);

    public ResultDO get(String id);

    public ResultDO remove(String id, String modifier);

    /**
     * 修改商品上下架
     * @param id
     * @param status
     * @param userName
     * @return
     */
    public ResultDO updateStatus(String id, int status, String userName);
    /**
     * 修改商品上下架
     * @param groupId
     * @param status
     * @param userName
     * @return
     */
    public ResultDO updateStatusByGroupId(String groupId, int status, String userName);
//    /**
//     * 根据商品组ID修改商品的折扣
//     * @param groupId
//     * @param discount
//     * @param userName
//     * @return
//     */
//    public ResultDO updateGoodsByGroupId(String groupId, Float discount, String userName);

    public ResultDO getGoodsByGoodsNo(Integer goodsNo);

    public ResultDO getGoodsByGoodsNo(Integer goodsNo, Long denomination, String rechargeNumber);
    /**
     *  返回订单上游通道
     * @param order
     * @return
     */
    public ResultDO getGoodsChannel(OrderDO order);
    
    /**
     * 查询所有有效商品
     * @return
     */
    public ResultDO listall();


    public ResultDO find(GoodsQueryDO query);

    public ResultDO findList(GoodsQueryDO query);

    //保存商品与商品组的关联
	public ResultDO saveRelation(String groupId, String[] goodsIds, String userName);

	//批量商品上下架
    public ResultDO saveShelfBatch(Integer status, String[] goodsIds, String userName);

    /**
     * 根据商品组ID删除改商品组下面的所有商品列表
     * @param groupId
     * @param modifier
     * @return
     */
    public ResultDO removeByGroupId(String groupId, String modifier);

    /**
     * 批量修改商品信息
     * @param goodsDO
     * @param ids
     * @return
     */
    public ResultDO updateGoodsBatchById(GoodsDO goodsDO, List<String> ids);

    /**
     * 根据商品ids批量删除商品
     * @param goodsIds
     * @param modifier
     * @return
     */
    public ResultDO removeList(String[] goodsIds, String modifier);

    /**
     * 根据商品组ID查询商品列表
     * @param groupId
     * @return
     */
    public ResultDO findByGroupId(String groupId);

    /**
     * 根据调解查询商品条数
     * @param domain
     * @return
     */
    public ResultDO selectCount(GoodsDO domain);

    /**
     * 根据商品ID id修改库存数量
     * @param id
     * @param stock 库存数  -1
     * @return
     */
    public ResultDO editStockById(String id, int stock);
}
